/**
 * @properties={typeid:35,uuid:"3B165160-B310-4ACD-97D2-228BC050F884"}
 */
var DS = null;

/**
 * @properties={typeid:35,uuid:"35E4C891-FF8C-409D-B1B5-CD8D9D0D812F",variableType:93}
 */
var fFechaDesde = null;

/**
 * @properties={typeid:35,uuid:"9068AE0A-3782-4AB0-99C8-FE218CC58DC2",variableType:93}
 */
var fFechaHasta = null;

/**
 * @properties={typeid:35,uuid:"D9C01142-FB08-4685-B0FF-50B304A61F9C",variableType:4}
 */
var fTipo = null;

/**
 * Consolida los asientos determinados por el rango de fechas especificado en el form
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"249A62B0-B763-4D19-AB52-A754BAAE6F95"}
 */
function consolidar(event) 
{
	if ((fFechaDesde.getMonth() == fFechaHasta.getMonth()) && (fFechaDesde.getYear() == fFechaHasta.getYear()))
	{
		var Searchdate = new Date()
		
		Searchdate = utils.dateFormat(fFechaDesde,'dd-MM-yyyy')+'...'+utils.dateFormat(fFechaHasta,'dd-MM-yyyy')


		var fs = databaseManager.getFoundSet('infocom','asiento_cab')
		fs.loadAllRecords()
		fs.find()
		
		fs.fecha = '#'+Searchdate +'|dd-MM-yyyy'
		fs.marca_consolidado = 0
		
		var cant = fs.search()
		
		if (cant == 0)
			globals.gDialog('Error','No hay asientos a consolidar en ese rango de fechas', 'OK','CerrarForm')
		else
		{
			grabarReg(fs)
			forms.asientos_cons_cab.controller.show()
		}
	}
	else
		globals.gDialog('Error','Las fechas deben ser del mismo mes y año', 'OK','CerrarForm')
}

/**
 * @properties={typeid:24,uuid:"D44ED0EB-4735-44D4-B37F-077F4C6BA94E"}
 */
function grabarReg (fs)
{
	var cons = databaseManager.getFoundSet('infocom','asiento_cons_cab')
	var tbl = databaseManager.getTable(fs)
	var colsCab = tbl.getColumnNames()
		tbl = databaseManager.getTable('infocom','asientos')
	var colsDtl = tbl.getColumnNames()

	var ds = crearDS()
	
	for (var i = 1 ; i <= fs.getSize() ; i++)
	{
		fs.setSelectedIndex(i)
		cons.newRecord()
		//arranco desde 1 para evitar el asiento_id
		for (var j=1;j<colsCab.length;j++)
		{
			cons[colsCab[j]] = fs[colsCab[j]]
		}
		
		//consolido asientos relacionados
		
		for (var k=1;k<=fs.asiento_cab_to_asientos.getSize();k++)
		{
			fs.asiento_cab_to_asientos.setSelectedIndex(k)
			cons.asiento_cons_cab_to_asientos_cons.newRecord()
			for (var l=1;l<colsDtl.length;l++)
			{
				if (colsDtl[l] != 'cabecera_id')
					cons.asiento_cons_cab_to_asientos_cons[colsDtl[l]] = fs.asiento_cab_to_asientos[colsDtl[l]]
			}
			sumar(ds,fs.asiento_cab_to_asientos.plan_id,fs.asiento_cab_to_asientos.importe_debe,fs.asiento_cab_to_asientos.importe_haber)
		}
		//forms.consolidacion_1.DS = '<html>' + ds.getAsHTML()+ '</html>'

		actualizarCuentas(ds)
		//fs.marca_consolidado = 1
		databaseManager.saveData()
	}	
}

/**
 * @properties={typeid:24,uuid:"6F151396-13D4-4D86-9944-155CA8D05051"}
 */
function crearDS ()
{
	var max = 100
	var query = "select plan_id,descripcion from plan_de_cuentas where marca_terminal = ?"
	var args = new Array()
	args[0] = 0
	
	var ds = databaseManager.getDataSetByQuery('infocom',query,args,max)
	ds.addColumn('debe')
	ds.addColumn('haber')
	
	//forms.consolidacion_1.DS = '<html>' + ds.getAsHTML()+ '</html>'
	return ds
}

/**
 * @properties={typeid:24,uuid:"05369088-60AA-42E5-BAF3-933B90342E4C"}
 */
function sumar(ds,plan,debe,haber)
{
	var cols = ds.getColumnAsArray(1)
	var i = cols.indexOf(plan) +1
	var valor = ds.getValue(i, 3)+ debe
	ds.setValue(i, 3, valor)
	valor = ds.getValue(i, 4)+ haber
	ds.setValue(i, 4, valor)
}

/**
 * @properties={typeid:24,uuid:"305DA0CA-754D-4C10-9B49-3ACB01444432"}
 */
function actualizarCuentas(ds)
{
	var fs = databaseManager.getFoundSet('infocom','plan_de_cuentas')
	var fs2 = databaseManager.getFoundSet('infocom','rel_asiento_ejer')
	var fs3 = databaseManager.getFoundSet('infocom','rel_asiento_ejer_mes')
	
	for (var i = 1; i <= ds.getMaxRowIndex();i++)
	{
		fs.loadAllRecords()
		fs.find()
		fs.plan_id = ds.getValue(i,1)
		var cant = fs.search()
		
		var debe = ds.getValue(i,3)
		var haber = ds.getValue(i,4)
		
		if (cant != 1)
		{
			//ERROR. NO ENCONTRO PLAN DE CUENTAS
			application.output('ERROR: NO ENCONTRO PLAN DE CUENTAS')
		}
		else
		{
			if (fs.subcuenta > 0)
				actualizarCuenta(fs2,fs3,fs.origen,fs.rubro,fs.subrubro,fs.cuenta,fs.subcuenta,debe,haber)
			actualizarCuenta(fs2,fs3,fs.origen,fs.rubro,fs.subrubro,fs.cuenta,0,debe,haber)
			actualizarCuenta(fs2,fs3,fs.origen,fs.rubro,fs.subrubro,0,0,debe,haber)
			actualizarCuenta(fs2,fs3,fs.origen,fs.rubro,0,0,0,debe,haber)
			actualizarCuenta(fs2,fs3,fs.origen,0,0,0,0,debe,haber)
		}
	}
}

/**
 * @properties={typeid:24,uuid:"C60D6448-06EA-475A-B346-EFC051718F8F"}
 */
function actualizarCuenta(fs2,fs3,o,r,sr,c,sc,debe,haber)
{
	var fs = databaseManager.getFoundSet('infocom','plan_de_cuentas')

	fs.loadAllRecords()
	fs.find()
	fs.origen = o
	fs.rubro = r
	fs.subrubro = sr
	fs.cuenta = c
	fs.subcuenta = sc
	var cant = fs.search()
	if (cant != 1)
	{
		//ERROR
		application.output('ERROR:NO ENCONTRO PLAN DE CUENTAS 2')
	}
	else
	{
		ejercicio (fs2,fs.plan_id,debe,haber)
		mes (fs3,fs.plan_id,debe,haber)
	}
}

/**
 * @properties={typeid:24,uuid:"4DB7FEDD-1931-4D01-AED6-C2C65665AFF8"}
 */
function ejercicio (fs2,plan,debe,haber)
{
		fs2.loadAllRecords()
		fs2.find()
		fs2.plancta_id = plan
		var cant = fs2.search()
		if (cant != 1)
		{
			//ERROR. PUEDE QUE NO EXISTA, LO DEBO DAR DE ALTA
			//application.output('Error')
			fs2.newRecord()
			fs2.userv_id = 1
			fs2.ejercicio_id = 1
			fs2.plancta_id = plan
			fs2.sum_deud_ejer = debe
			fs2.sum_acree_ejer = haber
		}
		else
		{
			fs2.sum_deud_ejer += debe
			fs2.sum_acree_ejer += haber
		}	
}

/**
 * @properties={typeid:24,uuid:"2C2F2E2C-942E-40A5-93E2-5AA0D82D1A52"}
 */
function mes (fs3,plan,debe,haber)
{
		fs3.loadAllRecords()
		fs3.find()
		fs3.plancta_id = plan
		var cant = fs3.search()
		if (cant != 1)
		{
			//ERROR. PUEDE QUE NO EXISTA, LO DEBO DAR DE ALTA
			fs3.newRecord()
			fs3.userv_id = 1
			fs3.ejercicio_id = 1
			fs3.plan_id = plan
			fs3.sum_deud_mes = debe
			fs3.sum_acree_mes = haber
			fs3.año = fFechaDesde.getFullYear()
			fs3.mes = fFechaDesde.getMonth()
		}
		else
		{
			fs3.sum_deud_mes += debe
			fs3.sum_acree_mes += haber
		}	
}
